package com.springboot.controller;


import com.springboot.common.Result;
import com.springboot.entity.Comment;
import com.springboot.service.ICommentService;
import com.springboot.utils.JwtTokenUtils;
import jakarta.annotation.Resource;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * <p>
 * 商品评论表 前端控制器
 * </p>
 *
 * @author zjb
 * @since 2025-10-30
 */
@RestController
@RequestMapping("/comment")
public class CommentController {

    @Resource
    private ICommentService iCommentService;

    /**
     * 添加评论
     *
     * @param comment 评论信息
     * @return 添加结果
     */
    @PostMapping("/add")
    public Result addComment(@RequestBody Comment comment) {
        Integer userId = JwtTokenUtils.getCurrentUser().getUserId();
        return iCommentService.addComment(userId, comment);
    }

    /**
     * 查询所有评论
     *
     * @param pageNum  页码
     * @param pageSize 每页数量
     * @param search 搜索参数
     * @return 评论列表
     */
    @GetMapping("/list")
    public Result getCommentAll(@RequestParam(defaultValue = "1") Integer pageNum,
                                @RequestParam(defaultValue = "10") Integer pageSize,
                                @RequestParam(required = false)String search){
        return iCommentService.getCommentAll(pageNum,pageSize,search);
    }

    /**
     * 根据商品ID获取评论列表
     *
     * @param productId 商品ID
     * @param pageNum   页码
     * @param pageSize  每页数量
     * @return 评论列表
     */
    @GetMapping("/product/{productId}")
    public Result getCommentsByProductId(@PathVariable Integer productId,
                                         @RequestParam(defaultValue = "1") Integer pageNum,
                                         @RequestParam(defaultValue = "10") Integer pageSize) {
        return iCommentService.getCommentsByProductId(productId, pageNum, pageSize);
    }

    /**
     * 根据用户ID获取评论列表
     *
     * @param userId   用户ID
     * @param pageNum  页码
     * @param pageSize 每页数量
     * @return 评论列表
     */
    @GetMapping("/user/{userId}")
    public Result getCommentsByUserId(@PathVariable Integer userId,
                                      @RequestParam(defaultValue = "1") Integer pageNum,
                                      @RequestParam(defaultValue = "10") Integer pageSize) {
        return iCommentService.getCommentsByUserId(userId, pageNum, pageSize);
    }

    /**
     * 删除评论
     *
     * @param commentId 评论ID
     * @return 删除结果
     */
    @DeleteMapping("/{commentId}")
    public Result deleteComment(@PathVariable Integer commentId) {
        Integer userId = JwtTokenUtils.getCurrentUser().getUserId();
        return iCommentService.deleteComment(userId, commentId);
    }

    /**
     * 批量删除评论
     * @param commentIds 评论id数组
     * @return 删除结果
     */
    @DeleteMapping("/batch")
    public  Result deleteCommentBatch(@RequestBody List<Integer> commentIds){
        return iCommentService.deleteCommentBatch(commentIds);
    }
}